#!/bin/bash

#    / **  
#    * 文件名：安装linux软件
#    * 版权： Copyright 谢振斌  All Rights Reserved.  
#    * 修改内容：新增  
#    * 修改人： 谢振斌  
#    * 修改时间：2021-3-23  
#    */  

#    / **  
#    *〈一句话功能简述〉  
#    *〈功能详细描述〉  
#    * @param [参数1] [参数1说明]  
#    * @param [参数2] [参数2说明]  
#    * @return [返回类型说明]  
#    * @exception/throws [违例类型] [违例说明]  
#    * @see [类、类#方法、类#成员]  
#    * @deprecated  
#    */  
function fun1()
{  
	echo "helld world !"

	# 在shell中：
	# $0: 获取当前脚本的名称
	# $#: 传递给脚本的参数个数
	# $$: shell脚本的进程号
	# $1, $2, $3...：脚本程序的参数
}



#    / **  
#    *〈 判断文件夹是否存在，不存在则，建立链接，存在则备份并建立链接 〉  
#    *〈功能详细描述〉  
#    * @param [参数1] [文件路径]  
#    * @param [参数2] [链接建立命令]  
#    * @return [返回类型说明]  
#    * @exception/throws [违例类型] [违例说明]  
#    * @see [类、类#方法、类#成员]  
#    * @deprecated  
#    * 例子：
#    *      判断文件夹 ~/.vim是否存在，不存在则执行命令，存在则备份后执行命令 
#    *      folderPath=${HOME}"/.vim"
#    *      echo "[Debug] folderPath= ${folderPath}"
#    *      commandStr="mkdir -p ${folderPath}"
#    *      echo "[Debug] commandStr=${commandStr}"
#    *      bakAndLinkFolder ${folderPath} "${commandStr}"
#    *      # 注：参数中带有空格，如果直接写的话，会从空格处自动切分开。解决方法：将这个引用变量用双引号括起来
#    */  
function bakAndLinkFolder()
{

    echo "[Debug]: bakAndLinkFolder !";
    # folderPath=${HOME}"/.vim"
    folderPath=$1;
    echo "[INFO]: bakAndLinkFolder=${folderPath}";
    commandStr=$2;
    echo "[INFO]: commandStr=${commandStr}";
    # 判断是文件夹是否已经存在
    if [ ! -d "$folderPath" ]; then
        echo "[INFO]: ${folderPath} 不存在!";
    else
        echo "[INFO]: ${folderPath} 已经存在!";
        # 备份文件
        echo "[INFO] 备份文件夹 ${folderPath}";
        cmdStr="mv ${folderPath} ${folderPath}-`date +%y%m%d%H%M%S`";
        echo "执行命令: ${cmdStr}";
        ${cmdStr}
    fi
    # 命令拼接
    #echo "[INFO]: 创建文件夹软链接";
    #commandStr="ln -s  "${dir}"/vimrc  "${HOME}"/.vimrc"
    echo "执行命令: ${commandStr}";
    ${commandStr}
}

#    / **  
#    *〈 判断文件是否存在，不存在则执行命令，存在则备份后执行命令 〉  
#    *〈功能详细描述〉  
#    * @param [参数1] [文件路径]  
#    * @param [参数2] [要执行的命令]  
#    * @return [返回类型说明]  
#    * @exception/throws [违例类型] [违例说明]  
#    * @see [类、类#方法、类#成员]  
#    * @deprecated  
#    * 例子：
#    *  # 判断文件~/.vimrc 是否存在，不存在则执行命令，存在则备份后执行命令 
#    *  configFilePath=${HOME}"/.vimrc"
#    *  commandStr="ln -s  ${dir}/vimrc  ${configFilePath}"
#    *  bakAndLinkFile ${configFilePath} "${commandStr}"
#    *  # 注：参数中带有空格，如果直接写的话，会从空格处自动切分开。解决方法：将这个引用变量用双引号括起来

#    */  
function bakAndLinkFile()
{

    # configFilePath=${HOME}"/.vimrc"
    configFilePath=$1;
    commandStr=$2;
    # 判断是文件是否已经存在
    if [ ! -f "$configFilePath" ]; then
        echo "[INFO]: ${configFilePath} 不存在!";
    else
        echo "[INFO]: ${configFilePath} 已经存在!";
        # 备份文件
        echo "[INFO] 备份文件 ${configFilePath}";
        cmdStr="mv ${configFilePath} ${configFilePath}-`date +%y%m%d%H%M%S`";
        echo "执行命令: ${cmdStr}";
        ${cmdStr}
    fi
    # 命令拼接
    #echo "[INFO]: 创建文件软链接";
    #commandStr="ln -s  "${dir}"/vimrc  "${HOME}"/.vimrc"
    echo "执行命令: ${commandStr}";
    ${commandStr}
}

#    / **  
#    *〈流程控制〉  
#    *〈该脚本的主函数〉  
#    * @param [无]  
#    * @return [无]  
#    * @exception/throws [无]  
#    * @deprecated  
#    */  
function processControlMain()  
{  
    # 打印当前系统时间  
    echo "Start..."  
    date  

    # 此处是你的代码  
    # ...  
    # fun1
	# 获取当前脚本目录位置
	cd `dirname $0`
	dir=`pwd`
	echo ${dir}

    # 判断文件夹 ~/.config/nvim 是否存在，不存在则执行命令，存在则备份后执行命令 
    folderPath=${HOME}"/.config/nvim"
    echo "[Debug] folderPath= ${folderPath}"
    # commandStr="mkdir -p ${folderPath}"
    commandStr="ln -s  ${dir}/nvim  ${folderPath}"
    echo "[Debug] commandStr=${commandStr}"
    bakAndLinkFolder ${folderPath} "${commandStr}"
    # 注：参数中带有空格，如果直接写的话，会从空格处自动切分开。解决方法：将这个引用变量用双引号括起来

    # # 判断文件 ~/.config/nvim/autoload/plug.vim 是否存在，不存在则执行命令，存在则备份后执行命令 
    # configFilePath=${HOME}"/.config/nvim/autoload/plug.vim"
    # commandStr="cp  ${dir}/.config/nvim/autoload/plug.vim  ${configFilePath}"
    # bakAndLinkFile ${configFilePath} "${commandStr}"
    # # 注：参数中带有空格，如果直接写的话，会从空格处自动切分开。解决方法：将这个引用变量用双引号括起来

    # # 判断文件~/.config/nvim/init.vim 是否存在，不存在则执行命令，存在则备份后执行命令 
    # configFilePath=${HOME}"/.config/nvim/init.vim"
    # commandStr="ln -s  ${dir}/init.vim  ${configFilePath}"
    # bakAndLinkFile ${configFilePath} "${commandStr}"
    # # 注：参数中带有空格，如果直接写的话，会从空格处自动切分开。解决方法：将这个引用变量用双引号括起来

    # 打印当前系统时间  
    date  
    echo "The End."
}  

# 执行入口 
# 进入脚本目录位置
cd `dirname $0`
# 获取当前脚本目录位置
shellfilepath=`pwd`'/'$0
# 打印脚本目录地址
echo "[INFO]: 脚本地址 "${shellfilepath}

if true  
# if false  
then  
    echo "[Debug] true"
    # 开始执行  从标准输入中读取并同时写入到标准输出和指定的文件上 
    ## 拼接日志文件地址
    #logfilepath=`pwd`'/'$0'.log'
    logfilepath=`pwd`'/'$0'-'$(date +%Y%m%d)'.log'
    #logfilepath=`pwd`'/'$0'-'$(date +%Y%m%d-%H-%M-%S)'.log'
    ## 打印日志文件地址
    echo "[INFO]: 日志地址" ${logfilepath}
    processControlMain  | tee -a ${logfilepath}
else  
    echo "[Debug] false"  
    ## 函数单元测试  
    #  
fi  

# 脚本结束  
# 软件配置文件软链接设置脚本


